package com.wang.system.service;



import com.wang.system.domain.exam.dto.ExamAddDTO;
import com.wang.system.domain.exam.dto.ExamEditDTO;
import com.wang.system.domain.exam.dto.ExamQueryDTO;
import com.wang.system.domain.exam.dto.ExamQuestionDTO;
import com.wang.system.domain.exam.vo.ExamDetailVO;
import com.wang.system.domain.exam.vo.ExamVO;

import java.util.List;

public interface IExamService {
    /**
     * 查询竞赛列表
     * @param examQueryDTO 传入一页要展示几条数据和页码,传入题目,开始时间的结束时间的限制条件
     * @return 返回竞赛列表
     */
    List<ExamVO> list(ExamQueryDTO examQueryDTO);

    /**
     * 添加竞赛
     * @param examAddDTO 竞赛信息(不包含题目)
     * @return 返回改变数据库的行数
     */
    String add(ExamAddDTO examAddDTO);

    /**
     * 查询当前竞赛详细信息,当管理人员想要编辑一个竞赛的时候,我们需要先把之前的竞赛详细信息查询到
     * @param examId 竞赛id
     * @return 返回竞赛详细信息
     */
    ExamDetailVO detail(Long examId);

    /**
     * 编辑当前竞赛信息
     * @param examEditDTO 修改后的竞赛信息
     * @return 返回修改成功的行数
     */
    int edit(ExamEditDTO examEditDTO);

    /**
     * 删除指定竞赛
     * @param examId 竞赛id
     * @return 返回数据库修改行数
     */
    int delete(Long examId);

    /**
     * 为指定竞赛添加题目
     * @param examQuestionDTO 竞赛id和题目id,保存信息保存到两者的关联表中
     * @return 返回是否批量添加成功
     */
    boolean questionAdd(ExamQuestionDTO examQuestionDTO);

    /**
     * 为指定竞赛删除题目
     * @param ExamId 竞赛id
     * @param questionId 题目id
     * @return 返回数据库改变行数
     */
    int questionDelete(Long ExamId,Long questionId);

    /**
     * 发布竞赛,修改竞赛发布状态
     * @param examId 竞赛id
     * @return 返回数据库修改行数
     */
    int publish(Long examId);

    /**
     * 撤销发布竞赛
     * @param examId 竞赛id
     * @return 返回数据库修改行数
     */
    int cancelPublish(Long examId);
}
